package com.chenyun.store.aws;


import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.chenyun.common.enums.StoreTypeEnum;
import com.chenyun.store.pojo.StoreDTO;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

/**
 * IOssClientService：
 * Description:
 *
 * @author: Lonni
 * @date: 2023/11/6 0006 11:31
 */
public interface IOssClientService {

    String[] CLOUD_SERVICE = new String[]{"aliyun", "qcloud", "qiniu", "obs"};

    /**
     * 上传文件
     *
     * @param data  文件流
     * @param path 文件路径 如果是本地会拼接基本地址 云存储会自动加上存储桶名称
     * @param contentType aws3上传使用的类型 ,传null由aws3自动设置
     * @return
     */
    public String upload(byte[] data, String path, String contentType) throws IOException;

    /**
     * 上传文件
     * @param inputStream
     * @param path 文件路径 如果是本地会拼接基本地址 云存储会自动加上存储桶名称
     * @param contentType aws3上传使用的类型 ,传null由aws3自动设置
     * @return
     * @throws IOException
     */
    public String upload(InputStream inputStream, String path, String contentType) throws IOException;

    /**
     * 获取文件内容
     * @param path 文件地址
     * @return
     * @throws FileNotFoundException
     */
    InputStream getObjectContent(String path) throws FileNotFoundException;

    /**
     * 上传文件
     * @param file
     * @param path 文件路径 如果是本地会拼接基本地址 云存储会自动加上存储桶名称
     * @return
     */
    public String upload(File file, String path);

    /**
     * 删除文件
     * @param path
     */
    public void delete(String path);


    /**
     * 设置上传地址
     * @param properties
     * @param path
     * @return
     */
    default public String getSavePath(StoreDTO properties,String path){
        String formatDate = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN);
        if (properties.getTypeEnum()== StoreTypeEnum.LOCAL) {
            String npath=properties.getBaseDir()+File.separator+File.separator+formatDate+File.separator+  path;
            npath=npath.startsWith("\\")?npath.substring(1,npath.length()):npath;
            return npath;
        }else {
         return    formatDate+File.separator+path;
        }

    }

    default public String getUrl(StoreDTO properties, String filePath) {
        //本地的需要吧将盘符去掉,然后通过nginx代理到指定位置
        if (properties.getTypeEnum()==StoreTypeEnum.LOCAL){
            String npath=filePath.replace(properties.getBaseDir(),"");
            npath=npath.startsWith("\\")?npath.substring(2,npath.length()):npath;
            return npath;
        }


        String domain = properties.getDomain().endsWith("/")?properties.getDomain().substring(0,properties.getDomain().lastIndexOf("/")):properties.getDomain();
        String endpoint = properties.getEndpoint();
        String header = properties.getHttps() ? "https://" : "http://";

        // 云服务商直接返回
        if (StringUtils.containsAny(endpoint, CLOUD_SERVICE)) {
            if (StringUtils.isNotBlank(domain)) {
                return header + domain + "/" + filePath;
            }
            return header + properties.getBucket() + "." + endpoint + "/" + filePath;
        }
        // minio 单独处理
        if (properties.getTypeEnum() == StoreTypeEnum.MINIO && StringUtils.isNotBlank(domain)) {
            return filePath;
        }
        return "";


    }


}



